package com.cmwa.solution.sys.attach.service;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cmwa.solution.base.entity.Page;
import com.cmwa.solution.base.entity.SearchParam;
import com.cmwa.solution.exception.ValidateFailedException;
import com.cmwa.solution.sys.attach.entity.AttachRelExtVo;
import com.cmwa.solution.sys.attach.entity.AttachVo;
import com.cmwa.solution.sys.attach.entity.FileVo;

/**
 * @author zhengqq
 * @date 2018年9月3日
 */
public interface AttachService {
	/**
	 * 查找附件
	 * @param attId
	 */
	AttachVo findById(String attId);
	/**
	 * 查找附件和附件关联关系关联起来的附件
	 * @param attId
	 * @return
	 */
	AttachVo findAttachAndRelByAttId(String attId);
	/**
	 * 新增附件
	 * @param attachVo
	 */
	void addAttach(AttachVo vo);
	/**
	 * 删除附件
	 * @param attachVo
	 */
	public void deleteAttach(AttachVo vo);
	
	/**
	 * 删除附件关联关系
	 * @param attachVo
	 */
	public void deleteAttachRel(AttachVo vo);

	/**
	 * 删除附件
	 * @param attId
	 */
	public void deleteAttachById(String attId);
	
	/**
	 * 保存有效的附件
	 * @param attachVo
	 */
	void saveValidAttach(AttachVo attachVo);

	/**
	 * 添加多个附件
	 * @param attachVos
	 */
	void addMultiAttach(List<AttachVo> attachVos);

	/**
	 * 将附件状态更新为DEL
	 * @author ex-weicb
	 * @createDate 2016年5月4日 下午4:05:26
	 * @param attId
	 */
	public void update2DelByAttId(String attId);
	
	/**
	 * 根据附件ID，获取附件大小
	 * 
	 * @param attId
	 * @return
	 */
	int getAttSize(String attId);
	
	void updateAttach(AttachVo vo);
	
	/**
	 * 公用的下载附件方法
	 * @param attId
	 * @param request
	 * @param response
	 * @param isUpload
	 * @throws IOException
	 * @throws ValidateFailedException
	 */
	void downloadAttach(String attId, HttpServletRequest request, HttpServletResponse response, String isUpload) throws IOException, ValidateFailedException;
	
	/**
	 * 公用的披量下载附件方法
	 * @param attIds
	 * @param fileName
	 * @param request
	 * @param response
	 */
	void downloadAttachZip(String attIds,String fileName, HttpServletRequest request, HttpServletResponse response);
	
	
	/**
	 * 公用的披量下载附件方法
	 * @param attIds
	 * @param fileName
	 * @param request
	 * @param response
	 */
	void downloadAttachZip(Map<String,String> attIds,String fileName, HttpServletRequest request, HttpServletResponse response);
	
	/**
	 * 根据附件ID，返回File对象，优先读取路径，再读取bolb字段
	 * @return
	 */
	FileVo getFileByAttId(String attId) throws FileNotFoundException;
	
	/**
	 * 根据附件关系类型、资源ID，获取附件
	 * @param attIds
	 * @return
	 */
	List<AttachVo> queryAttachByRelIdAndType(String relId, String relType);
	
	/**
	 * 修改附件路径
	 * @param attachVo
	 */
	void updateAttachFilePathByAttId(List<Map<String, String>> tmpList);
	
	/**
	 * 获取附件
	 * @param attIds
	 * @return
	 */
	List<AttachVo> findByIds(String[] attIds);
	
	/**
	 * 新增附件扩展表
	 * @param attId
	 * @param attrName
	 * @param attrValue
	 * @param createId
	 */
//	void insertAttExt(String attId, String attrName, String attrValue);
	
	/**
	 * 添加附件关联关系
	 * @param empId
	 * @param bussessId
	 * @param relType
	 * @param attIds
	 * @return
	 */
	int addAttachRel2(String empId,String bussessId,String relType,String attIds);
	
	/**
	 * 删除附件关联关系
	 * @param bussessId
	 * @param relType
	 * @return
	 */
	int deleteAttachRel2(String bussessId,String relType);
	/**
	 * 删除附件关联关系
	 * @return
	 */
	int deleteAttachRelByAttId(String attId);
	
	/**
	 * 更新附件的关联关系
	 * @author ex-hejm
	 * @date 2019年2月13日上午10:43:34
	 * @param sourceId
	 * @param sourceSign
	 */
	void alterAttachRel(String sourceId, String sourceSign, String attIds);
	/**
	 * 扩展
	 * @author ex-hejm
	 * @date 2019年2月14日上午10:08:35
	 * @param extId
	 * @return
	 */
//	AttachInfoExtVo queryAttExtById(String extId);
	
//	void updateAttExt(AttachInfoExtVo attachExtVo);
	
//	void insertAttExt(String attId, String attrName, String attrValue, String userId);
	
	List<AttachRelExtVo> listAttachExtByAttId(String attId);
	
	Page<AttachVo> attAndRelAndExtListPage(SearchParam sp);
	
	List<AttachVo> attAndRelAndExtList(SearchParam sp);
	
	List<AttachVo> batchDownAttach(SearchParam sp);
	
	/**
	 * 打包文件，可同时打包附件表的文件和传入的文件
	 * @param attIds
	 * @param zipFileMap
	 * @param fileName
	 * @param request
	 * @param response
	 */
	void downloadAttachZip(Map<String, String> attIds, Map<String, Map<String, File>> zipFileMap, String fileName, HttpServletRequest request, HttpServletResponse response);
	
}
